/**
 * 
 */
package ar.edu.utn.frgp.taglibs;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import ar.edu.utn.frgp.banco.jsp.Fallos;

/**
 * @author PUSDERKIS
 * 
 */
public class TagErrores extends TagSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6517041060896882607L;
	private static final String UL = "<ul>";
	private static final String ULEND = "</ul>";
	private static final String LI = "<li>";
	private static final String LIEND = "</ul>";
	private static final String DIVEND = "</div>";

	/*
	 * (non-Javadoc)
	 * 
	 * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public int doStartTag() throws JspException {

		Fallos fallos = null;
		if (pageContext.getRequest().getAttribute("errores") instanceof Fallos) {
			fallos = (Fallos) pageContext.getRequest().getAttribute("errores");
			if (fallos != null) {
				if (fallos.hasErrores()) {

					printErrores(fallos.getErrores());

				}
				if (fallos.hasAdvertencias()) {
					printAdvertencias(fallos.getAdvertencias());
				}
			}

		} else {
			if (pageContext.getRequest().getAttribute("errores") instanceof List){
				printGenerico((List)pageContext.getRequest().getAttribute("errores"));
			} else {
				if (pageContext.getRequest().getAttribute("errores") instanceof String){
					List <String> mensaje = new ArrayList<String>();
					mensaje.add((String) pageContext.getRequest().getAttribute("errores"));
					printGenerico(mensaje);
				}
			}
				
					
		}

		return super.doStartTag();
	}

	private void printErrores(List<String> errores) {

		if (errores == null)
			return;

		StringBuffer sb = new StringBuffer(250);

		if (!errores.isEmpty()) {
			sb.append("<div class=\"errorComponent errores\" >");
			sb.append(UL);

			for (String e : errores) {
				sb.append(LI).append(e).append(LIEND);
			}
			sb.append(ULEND);
			sb.append(DIVEND);
			
			try {
				pageContext.getOut().println(sb.toString());
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			
		}
		
		

	}

	private void printAdvertencias(List<String> advertencias) {

		if (advertencias == null)
			return;

		StringBuffer sb = new StringBuffer(250);

		if (!advertencias.isEmpty()) {
			sb.append("<div class=\"errorComponent advertencias\" >");
			sb.append(UL);

			for (String e : advertencias) {
				sb.append(LI).append(e).append(LIEND);
			}
			sb.append(ULEND);
			sb.append(DIVEND);
			
			try {
				pageContext.getOut().println(sb.toString());
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}

	}

	private void printGenerico(List<String> mensajes) {

		if (mensajes == null)
			return;

		StringBuffer sb = new StringBuffer(250);

		if (!mensajes.isEmpty()) {
			sb.append("<div class=\"errorComponent\" >");
			sb.append(UL);

			for (String e : mensajes) {
				sb.append(LI).append(e).append(LIEND);
			}

			sb.append(ULEND);
			sb.append(DIVEND);
			
			try {
				pageContext.getOut().println(sb.toString());
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}

	}

}
